package com.yunke.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yunke.entity.YunkeCommunityPost;
import com.yunke.entity.vo.YunkeCommunityPostVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 社群动态 Mapper 接口
 * 
 * @author yunke
 * @since 1.0.0
 */
@Mapper
public interface YunkeCommunityPostMapper extends BaseMapper<YunkeCommunityPost> {

    /**
     * 分页查询社群动态列表
     */
    Page<YunkeCommunityPostVo> selectPostPage(Page<YunkeCommunityPostVo> page,
                                              @Param("communityId") Long communityId,
                                              @Param("postType") Integer postType,
                                              @Param("isTop") Boolean isTop,
                                              @Param("isEssence") Boolean isEssence,
                                              @Param("userId") Long userId);

    /**
     * 获取动态详情
     */
    YunkeCommunityPostVo selectPostDetail(@Param("id") Long id, @Param("userId") Long userId);

    /**
     * 获取置顶动态列表
     */
    List<YunkeCommunityPostVo> selectTopPosts(@Param("communityId") Long communityId, @Param("userId") Long userId);

    /**
     * 获取精华动态列表
     */
    List<YunkeCommunityPostVo> selectEssencePosts(@Param("communityId") Long communityId, @Param("userId") Long userId);

    /**
     * 获取热门动态列表
     */
    List<YunkeCommunityPostVo> selectHotPosts(@Param("communityId") Long communityId,
                                              @Param("userId") Long userId,
                                              @Param("limit") Integer limit);

    /**
     * 获取最新动态列表
     */
    List<YunkeCommunityPostVo> selectLatestPosts(@Param("communityId") Long communityId,
                                                 @Param("userId") Long userId,
                                                 @Param("limit") Integer limit);

    /**
     * 获取用户发布的动态列表
     */
    List<YunkeCommunityPostVo> selectUserPosts(@Param("publisherId") Long publisherId,
                                               @Param("communityId") Long communityId,
                                               @Param("userId") Long userId);

    /**
     * 搜索社群动态
     */
    List<YunkeCommunityPostVo> searchPosts(@Param("communityId") Long communityId,
                                           @Param("keyword") String keyword,
                                           @Param("userId") Long userId,
                                           @Param("limit") Integer limit);

    /**
     * 更新动态统计数据
     */
    int updatePostStats(@Param("postId") Long postId,
                       @Param("likeCount") Integer likeCount,
                       @Param("commentCount") Integer commentCount,
                       @Param("shareCount") Integer shareCount,
                       @Param("viewCount") Integer viewCount,
                       @Param("collectCount") Integer collectCount);

    /**
     * 批量更新动态状态
     */
    int batchUpdatePostStatus(@Param("ids") List<Long> ids, @Param("postStatus") Integer postStatus);

    /**
     * 获取社群动态数量统计
     */
    Integer countCommunityPosts(@Param("communityId") Long communityId);

    /**
     * 获取用户在社群中的动态数量
     */
    Integer countUserPostsInCommunity(@Param("publisherId") Long publisherId, @Param("communityId") Long communityId);

    /**
     * 删除社群所有动态
     */
    int deleteAllPostsByCommunityId(@Param("communityId") Long communityId);
} 